class_name Effect
extends RefCounted

var sound: AudioStream


func execute(_targets: Array[Node]) -> void:
	pass

# 新增：翻倍检查方法
func get_enhanced_amount(base_amount: int, target_or_modifier_handler) -> int:
	if not target_or_modifier_handler:
		return base_amount
	
	var modifier_handler: ModifierHandler = null
	
	# 如果传入的是ModifierHandler，直接使用
	if target_or_modifier_handler is ModifierHandler:
		modifier_handler = target_or_modifier_handler
	# 如果传入的是Node，尝试获取其modifier_handler
	elif target_or_modifier_handler is Node:
		var target = target_or_modifier_handler
		# 尝试通过方法获取
		if target.has_method("get_modifier_handler"):
			modifier_handler = target.get_modifier_handler()
		# 尝试直接访问属性
		elif target.get("modifier_handler") != null:
			modifier_handler = target.modifier_handler
	
	if not modifier_handler:
		return base_amount
	
	# 检查卡牌效果翻倍
	var card_multiplier = _get_card_effect_multiplier(modifier_handler)
	
	# 检查其他类型的增强（未来扩展）
	var other_multiplier = _get_other_enhancements(modifier_handler)
	
	# 计算最终数值
	var final_amount = base_amount * card_multiplier * other_multiplier
	return int(final_amount)

# 获取卡牌效果翻倍
func _get_card_effect_multiplier(modifier_handler: ModifierHandler) -> float:
	var multiplier_modifier = modifier_handler.get_modifier(Modifier.Type.CARD_EFFECT_MULTIPLIER)
	if multiplier_modifier:
		# 使用get_modified_value(1)来获取倍数，因为1 * 倍数 = 倍数
		var multiplier = multiplier_modifier.get_modified_value(1)
		return float(multiplier)
	return 1.0

# 获取其他增强效果（预留接口）
func _get_other_enhancements(modifier_handler: ModifierHandler) -> float:
	# 未来可以在这里添加其他类型的增强
	return 1.0

# 子类可以重写这个方法来自定义增强逻辑
func should_apply_enhancement() -> bool:
	return true
